#include "mytablelist.h"
#include <QDebug>
#include <QFile>
myTablelist::myTablelist(QObject *parent) : QAbstractTableModel(parent) {}

int myTablelist::rowCount(const QModelIndex &parent) const {
    Q_UNUSED(parent);
    return scheduleList.size();
}

int myTablelist::columnCount(const QModelIndex &parent) const {
    Q_UNUSED(parent);
    return 2;
}

QVariant myTablelist::data(const QModelIndex &index, int role) const {
    if (!index.isValid() || role != Qt::DisplayRole)
        return QVariant();

    const int row = index.row();
    const int col = index.column();

    if (row < 0 || row >= scheduleList.size())
        return QVariant();

    const ScheduleItem &item = scheduleList[row];
    if (col == 0) return item.date;
    if (col == 1) return item.event;

    return QVariant();
}

QVariant myTablelist::headerData(int section, Qt::Orientation orientation, int role) const {
    if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
        switch (section) {
            case 0: return "日期";
            case 1: return "上课情况";
        }
    }
    return QVariant();
}

void myTablelist::addSchedule(const ScheduleItem &item)
{
    beginInsertRows(QModelIndex(), rowCount(), rowCount()); // 通知视图即将插入行
    scheduleList.append(item); // 实际添加数据
    endInsertRows(); // 通知视图插入完成（触发刷新）
}

// 新增：删除指定行（通知视图）
void myTablelist::removeSchedule(int row)
{
    if (row < 0 || row >= scheduleList.size()) return;
    beginRemoveRows(QModelIndex(), row, row); // 通知视图即将删除行
    scheduleList.removeAt(row); // 实际删除数据
    endRemoveRows(); // 通知视图删除完成（触发刷新）
}

// 新增：更新指定行（通知视图）
void myTablelist::updateSchedule(int row, const ScheduleItem &item)
{
    if (row < 0 || row >= scheduleList.size()) return;
    scheduleList[row] = item; // 实际更新数据
    // 通知视图指定区域数据已变更（行：row，列：0到1）
    emit dataChanged(index(row, 0), index(row, 1));
}

// 新增：清空所有数据（通知视图）
void myTablelist::clear()
{
    if (scheduleList.isEmpty()) return;
    beginRemoveRows(QModelIndex(), 0, rowCount() - 1); // 通知视图即将删除所有行
    scheduleList.clear(); // 实际清空数据
    endRemoveRows(); // 通知视图删除完成（触发刷新）
}

ScheduleItem myTablelist::getItem(int row) const {
    if (row >= 0 && row < scheduleList.size())
        return scheduleList[row];
    return ScheduleItem{};
}

const QVector<ScheduleItem>& myTablelist::getAllItems() const {
    return scheduleList;
}
